public class code01 {
//    二叉树的层平均值
public List<Double> averageOfLevels(TreeNode root) {
    // 解法一：通过层序遍历的方式实现对于树中每一层参数的计算
    // 首先定义一个数组用来存放对应的平均值最终作为返回值
    List<Double> re = new ArrayList<Double>();
    // 再来定义一个队列，用来存放树的每一行元素
    Queue<TreeNode> queue = new LinkedList<TreeNode>();

    // 首先，现将树的根节点存储起来
    queue.offer(root);

    // 之后通过迭代，将整个树遍历完成并且实现题目要求
    while(!queue.isEmpty()) {
        // 定义一个参数，记录当前行中所有节点的数据和
        double flag = 0;
        int size = queue.size();
        for(int i = 0; i < size; i++) {
            // 获取到队列中的每一个节点值并且计算
            TreeNode node = queue.poll();
            flag += node.val;

            // 尝试将当前节点的左右值存储起来
            TreeNode left = node.left;
            TreeNode right = node.right;
            // 对左右节点进行非空判断
            if(left != null) {
                queue.offer(left);
            }
            if(right != null) {
                queue.offer(right);
            }
        }
        // 一次 for 循环结束，就表示着这一层的节点计算完成
        // 此时需要根据题意计算平均值
        re.add(flag / size);
    }

    // while 循环结束之后，返回平均值数组
    return re;
}
}
